Python에서 `__str__` 메서드 이해
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
__str__
메서드는 Python 객체의 사용자 친화적인 문자열 표현을 정의합니다.__str__
을 오버라이드하면 객체 인쇄 또는 로깅 시 가독성이 향상됩니다.__str__
은 개발자 및 디버깅을 대상으로 하는__repr__
과 구별됩니다.
Python에서 모든 객체는 문자열 표현을 가집니다. __str__
메서드는 객체가 문자열로 표현되는 방식을 정의하는 데 중요한 역할을 합니다. 객체를 인쇄하거나 str()
을 사용하여 문자열로 변환한 적이 있다면, 인지하든 못하든 __str__
과 상호 작용한 것입니다.
__str__
이란 무엇인가요?
__str__
메서드는 Python에서 객체의 "비공식적" 또는 사용자 친화적인 문자열 표현을 정의하는 데 사용되는 특수 (또는 "매직") 메서드입니다. 내장 함수 str()
또는 객체에서 print()
함수를 사용할 때 호출됩니다.
구문
class MyClass: def __str__(self): return "This is a string representation of MyClass"
다음을 실행하면:
obj = MyClass() print(obj)
출력:
This is a string representation of MyClass
__str__
을 오버라이드하는 이유는 무엇인가요?
기본적으로 __str__
을 오버라이드하지 않으면 Python은 기본 object
클래스에 정의된 일반적인 구현으로 대체됩니다. 해당 기본값은 일반적으로 다음과 같은 문자열을 반환합니다.
<__main__.MyClass object at 0x7f1a2b3c4d50>
이는 사용자나 개발자에게 그다지 도움이 되지 않습니다. __str__
을 오버라이드하면 특히 디버깅 및 로깅 중에 클래스를 더 읽기 쉽게 만들 수 있습니다.
__str__
과 __repr__
의 차이점
__str__
과 __repr__
모두 문자열 표현을 다루지만 서로 다른 목적을 수행합니다.
__str__
은 사람이 읽을 수 있는 문자열을 반환하기 위한 것입니다.__repr__
은 이상적으로 객체를 다시 만드는 데 사용할 수 있는 명확한 문자열을 반환하기 위한 것입니다.
예제
class Book: def __init__(self, title, author): self.title = title self.author = author def __str__(self): return f"{self.title} by {self.author}" def __repr__(self): return f"Book(title={self.title!r}, author={self.author!r})"
이제:
book = Book("1984", "George Orwell") print(str(book)) # 1984 by George Orwell print(repr(book)) # Book(title='1984', author='George Orwell')
모범 사례
__str__
출력은 간결하고 사용자 친화적으로 유지하세요.- 객체를 설명하는 데 도움이 되는 가장 관련성 높은 속성만 포함하세요.
- 문자열에 너무 많은 세부 정보를 넣지 마세요. 이는
__repr__
에 맡기세요.
__str__
은 언제 호출되나요?
print(obj)
를 사용할 때str(obj)
를 호출할 때f"{obj}"
와 같은 f-문자열에서
__str__
이 정의되지 않았지만 __repr__
이 정의된 경우 str()
은 __repr__
로 대체됩니다.
결론
__str__
메서드를 오버라이드하는 것은 Python 클래스를 더욱 직관적이고 사용자 친화적으로 만드는 작지만 강력한 방법입니다. 객체가 문자열로 표현되는 방식을 사용자 정의하면 디버깅, 로깅 및 전반적인 코드 명확성을 개선할 수 있습니다.
FAQs
print()
, str()
, 또는 f"{obj}"
와 같은 f-문자열을 사용할 때 호출됩니다.
Python은 사용 가능한 경우 __repr__
로 대체됩니다. 그렇지 않으면 기본 객체 문자열을 사용합니다.
예, 명확한 출력 및 디버깅 지원을 위해 둘 다 정의하는 것이 가장 좋습니다.
Leapcell은 Python 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하세요. 요청, 수수료가 없습니다.
최고의 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불하세요.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리하기 위한 자동 확장.
- 운영 오버헤드가 전혀 없습니다. 빌드에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ